﻿#include <stdio.h>
#include <stdlib.h>

//对NULL指针解引用
//void test()
//{
//	int* p = (int*)malloc(INT_MAX / 4);
//	*p = 20;//如果p的值是NULL，就会有问题
//	free(p);
//}

//    解决办法
//void test()
//{
//	int* p = (int*)malloc(INT_MAX / 4);
//	if (p == NULL)
//	{
//		perror("malloc");
//		return 1;
//	}
//	*p = 20;
//	free(p);
//}

//对动态开辟内存的越界访问

//void test()
//{
//	int i = 0;
//	int* p = (int*)malloc(10 * sizeof(int));
//	if (NULL == p)
//	{
//		perror("malloc");
//		return 1;
//	}
//	for (i = 0; i <= 10; i++)
//	{
//		*(p + i) = i;
//	}
//	free(p);
//}


//   对⾮动态开辟内存使⽤free释放
//void test()
//{
//	int a = 0;
//	int* p = &a;
//	free(a);
//}


   //    使⽤free释放⼀块动态开辟内存的⼀部分

//int main(void)
//{
//	int* p = (int*)malloc(40);
//	if (p == NULL)
//	{
//		perror("malloc");
//		return 1;
//	}
//
//	int i = 0;
//	for (i = 0; i < 5; i++)
//	{
//		*p = i;
//		p++;
//	}
//
//	free(p);
//	p = NULL;
//
//	return 0;
//}


//    对同⼀块动态内存多次释放
//void test()
//{
//	int* p = (int*)malloc(100);
//	if (p == NULL)
//	{
//		perror("malloc");
//		return 1;
//	}
//	free(p);
//	free(p);
//}

//     忘记释放空间
//void test()
//{
//	int* p = (int*)malloc(100);
//	if (NULL != p)
//	{
//		*p = 20;
//	}
//}
//int main()
//{
//	test();
//	while (1);
//}